home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / GraphView.h < prev    next >
C/C++ Source or Header  |  1990-11-28  |  4KB  |  142 lines

  1. #ifndef GraphView_First
  2. #ifdef __GNUG__
  3. #pragma once
  4. #endif
  5. #define GraphView_First
  6.  
  7. #include "TreeView.h"
  8. #include "Collection.h"
  9.  
  10. //---- GraphNode ------------------------------------------------------------------
  11.  
  12. enum GraphNodeFlags {
  13.     eGraphPosSet        =   BIT(eTreeNodeLast+1),
  14.     eGraphInCalc        =   BIT(eTreeNodeLast+2),
  15.     eGraphNodeLast      =   eTreeNodeLast+2
  16. };
  17.  
  18. class GraphNode: public TreeNode {
  19.     Collection *constrainingNodes;
  20.     Collection *nonTreeOutEdges;
  21.     int inEdges;
  22. public:
  23.     MetaDef(GraphNode);
  24.  
  25.     GraphNode(int id= cIdNone, Collection *cp= 0);
  26.     ~GraphNode();
  27.     
  28.     //---- construction
  29.     void AddNonTreeOutEdge(GraphNode*);
  30.     void AddConstrainingNode(GraphNode*);
  31.     void AddNode(VObject *vp)
  32.     { GetList()->Add(vp); }
  33.     void AddInEdge(VObject *)
  34.     { inEdges++; }
  35.     int NumInEdges()
  36.     { return inEdges; }
  37.     
  38.     //---- layout
  39.     int CalcShift();   
  40.     // calculate amout to shift a node to the right
  41.     bool InCalcShift()
  42.     { return TestFlag(eGraphInCalc); }
  43.     bool IsPositionSet()
  44.     { return TestFlag(eGraphPosSet); }
  45.     VObject *Image();
  46.     
  47.     //---- drawing
  48.     void Draw(Rectangle);
  49.     void DrawConnections();
  50.  
  51.     //---- input/output
  52.     void Export(ostream &s);
  53. };
  54.  
  55. //---- GraphView ----------------------------------------------------------------
  56.  
  57. class GraphView: public TreeView {
  58.     class Collection *paths, *refs;
  59.  
  60. protected:    
  61.     class IdDictionary *nodes;      // maps objects to GraphNodes
  62.     void DrawPaths(Rectangle r);
  63.     void DrawReferences(Rectangle r);
  64.     VObject *DoCreateDialog();
  65.     Iterator *MakeChildrenIter(Object *op);
  66. public:
  67.     MetaDef(GraphView);
  68.     GraphView(EvtHandler *dp);
  69.     ~GraphView();
  70.     
  71.     //---- construction 
  72.     void EmptyGraph();
  73.     GraphNode *BuildGraphDFS(Object *);
  74.     void BuildGraphBFS(Object *);
  75.     GraphNode *FindRoot();
  76.     void SetGraph(GraphNode *root, bool free=TRUE);
  77.     void CalcExtent();
  78.     
  79.     //---- hooks for BuildGraph/FindRoot
  80.     virtual VObject *DoCreateRoot();
  81.     virtual Iterator *MakeSubPartsIter(Object *);
  82.     
  83.     //---- drawing
  84.     void SetConnType(TreeConnection ct);
  85.     void Draw(Rectangle);
  86.  
  87.     //---- accessing
  88.     VObject *AssociatedVObject(Object *);
  89.     GraphNode *AssociatedGraphNode(Object *);
  90.     GraphNode *FindNode(Point p);
  91.     
  92.     Command *DoLeftButtonDownCommand(Point lp, Token t, int cl);
  93.     Command *DoMiddleButtonDownCommand(Point lp, Token t, int cl);
  94.  
  95.     //---- path handling 
  96.     void AddPath(class GraphPath*);
  97.     GraphPath *RemovePath(class GraphPath*);
  98.     void RemoveAllPaths();
  99.  
  100.     //---- references handling
  101.     void AddReference(class GraphReference*);
  102.     GraphReference *RemoveReference(GraphReference*);
  103.     void RemoveAllReferences();
  104. };
  105.  
  106. //---- GraphPath ------------------------------------------------------------
  107.  
  108. class GraphPath: public VObject {
  109.     class Collection *nodes;
  110.     GraphView *gvp;
  111.     int width;
  112.     Ink *ink;
  113.     bool free;
  114. public:
  115.     GraphPath(GraphView *, Collection *nodes, Ink *ink, int width= 2, bool free= FALSE);
  116.     ~GraphPath();
  117.     void Draw(Rectangle);
  118.     Rectangle BBox();
  119. };
  120.     
  121. //---- GraphReference ------------------------------------------------------------
  122.  
  123. class GraphReference: public VObject {
  124. protected:
  125.     class Collection *nodes;
  126.     Object *referto;
  127.     GraphView *gvp;
  128.     int width;
  129.     Ink *ink;
  130.     bool free;
  131. public:
  132.     GraphReference(GraphView *, Object *op, Collection *nodes, Ink *ink, int width= 2, bool free= FALSE);
  133.     ~GraphReference();
  134.     virtual void Draw(Rectangle);
  135.     virtual void DrawConnection(int n, VObject *from, VObject *to);
  136.     Rectangle BBox();
  137. };
  138.  
  139. #endif GraphView_First
  140.  
  141.  
  142.